package com.example.common;

import javax.crypto.Cipher;
import javax.crypto.spec.IvParameterSpec;
import javax.crypto.spec.SecretKeySpec;
import java.nio.charset.StandardCharsets;
import java.util.Base64;

public class AES {
    private static final String secretKeyBase64 = "7fPq1vIdS/jxYVX5uK9MEkEINYYpsYcb6+Lf17xZT48=";

    /**
     * 解密 CryptoJS 加密的密文
     * @param cipherText 前端加密后的 Base64 密文
     * @return 解密后的明文
     */
    public static String decrypt(String cipherText) throws Exception {
        // 1. 解码 Base64 密钥
        byte[] keyBytes = Base64.getDecoder().decode(secretKeyBase64);

        // 2. 使用密钥字节创建 SecretKeySpec
        SecretKeySpec keySpec = new SecretKeySpec(keyBytes, "AES");

        // 3. CryptoJS 默认使用全零 IV
        byte[] ivBytes = new byte[16]; // 全零 IV
        IvParameterSpec iv = new IvParameterSpec(ivBytes);

        // 4. Base64 解码密文
        byte[] encryptedBytes = Base64.getDecoder().decode(cipherText);

        // 5. 初始化解密器
        Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
        cipher.init(Cipher.DECRYPT_MODE, keySpec, iv);

        // 6. 解密
        byte[] original = cipher.doFinal(encryptedBytes);

        // 7. 转字符串返回
        return new String(original, StandardCharsets.UTF_8);
    }
}